<Accordion title="Can I change the Elementary schema?">

The short answer is yes.
We recommend that Elementary models will have their own schema, but it is not mandatory.
You can change the schema name by using dbt [custom schema configuration](https://docs.getdbt.com/docs/building-a-dbt-project/building-models/using-custom-schemas) on your `dbt_project.yml`.
In short, the default dbt `generate_schema_name` macro concatenate the value provided in `schema` configuration key to the target schema, as in: `target_schema_custom_schema`.

If you want a different behaviour, like configuring a full name for the Elementary schema, you can override the default `generate_schema_name` macro with your logic.
Before you do that, make sure that there isn't already a macro named `generate_schema_name.sql` in your project.

Here is a macro you can use that would search for a config under `meta` named `schema_name`.
If it exists, that would be the schema name. If not - the original dbt logic would be followed:

```sql generate_schema_name.sql
{% macro generate_schema_name(custom_schema_name, node) -%}

    {%- set default_schema = target.schema -%}
    {% set config_meta = node.config.get('meta') %}

    {% if config_meta and config_meta is mapping %}
        {% set schema_name = config_meta.get('schema_name') %}
        {% if schema_name and schema_name is string %}
            {{ return(schema_name) }}
        {% endif %}

    {%- elif custom_schema_name is none -%}

        {{ default_schema }}

    {%- else -%}

        {{ default_schema }}_{{ custom_schema_name | trim }}

    {%- endif -%}

{%- endmacro %}
```

If you implement this macro and want to name the Elementary schema `elementary_data_observability`:

```yml dbt_project.yml
models:
  elementary:
    +meta:
      schema_name: "elementary_data_observability"
```

</Accordion>
